package crawler_twitter;

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import object.Utente;

import mysql.Connector;
import mysql.DBCache;

import access_twitter.TwitterFactory;
import access_twitter.TwitterWrapper;
import access_twitter.searchItem;


import winterwell.jtwitter.Twitter.Status;
import winterwell.jtwitter.Twitter.User;

public class Crawlerretweet {
	TwitterWrapper twitter;
	DBCache dbCache;
	
	public  Crawlerretweet() {
		twitter = TwitterFactory.getInstance().getTwitterWrapper();
		dbCache = DBCache.getInstance();
	}
	

	private void run(Utente utn) {
		//avvio la connessione al db, il programma usa una sola connessione al db mysql
		Connector.getInstance().connetti();		
		if (utn != null){
			crawluserret(utn);
		}else
			System.out.println("Impossibile scaricare di " + utn );
		
		//chiudo la connessione al db
		Connector.getInstance().disconnetti();
	}
	
	private void crawluserret(Utente utn) {
		List<Status> status = new LinkedList<Status>();
		List<List<User>> statusret = new LinkedList<List<User>>();
		HashMap<String, List<String>> mappa = new HashMap<String, List<String>>();
		System.out.println("inizio scanzione per "+utn.getNome());
		status=twitter.getUserTimeline(utn.getNome());
		System.out.println("lunghezza lista status "+ status.size());
		for (Status s :status){
			statusret.add(twitter.getRetweet(s));
		}
		for(List<User> ls:statusret){
			List<String> utenti=null;
			for (User s2:ls){
				utenti.add(s2.getScreenName());				
			}
			mappa.put(utn.getNome(), utenti);
		}
	}
	
		public void test(String utn) {
			List<Status> status = new LinkedList<Status>();
			List<List<User>> statusret = new LinkedList<List<User>>();
			System.out.println("inizio scanzione per "+utn);
			status=twitter.getUserTimeline(utn);
			System.out.println("lunghezza lista status "+ status.size());
			for (Status s :status){
				//System.out.println(s.getText().toString());
				statusret.add(twitter.getRetweet(s));
			}
			int c;
			System.out.println("lunghezza lista status aaaa "+ statusret.size());
			for(List<User> ls:statusret){
				c=0;
				for (User s2:ls){
					c++;
					System.out.println("lunghezza lista "+ ls.size());
					System.out.println(s2.getScreenName());
					System.out.println(c);
				}
			}
		}
		
		public Set<String> getListUser(String utn) {
			List<Status> status = new LinkedList<Status>();
			List<List<User>> statusret = new LinkedList<List<User>>();
			Set<String> ut = new HashSet<String>();
			System.out.println("inizio scanzione per "+utn);
			status=twitter.getUserTimeline(utn);
			System.out.println("lunghezza lista status "+ status.size());
			for (Status s :status){
				statusret.add(twitter.getRetweet(s));
			}
			System.out.print("Salvataggio nomi utenti   ");
			for(List<User> ls:statusret){
				for (User s2:ls){
					ut.add(s2.getScreenName());
				}
			}
			return ut;
		}
		
		/*System.out.println("l'utente "+utn.getNome() +"ha "+amici.size()+"amici");
		dbCache.inserisciAmici(utn.getNome(), amici);
		System.out.println("inizio inserimento tweetAmici");
		for (User us:amici){
			if(limiteAmici<201){
			System.out.println("scanzione timeline utente "+us.getScreenName());
			twitter.getUserTimeline(us.getScreenName());
			dbCache.inserisciTweetAmici(twitter.getUserTimeline(us.getScreenName()),utn.getId());
			limiteAmici++;
			}
		}
		System.out.println("inserimento tweetAmici "+utn.getNome()+" completato");*/
	
	
	
	public static void main(String[] args) {
		List<Utente> utentidascanzionare = new LinkedList<Utente>();
		List<Utente> utentitemp = new LinkedList<Utente>();
		List<String> idutente = new LinkedList<String>();
		DBCache db;
		db = DBCache.getInstance();
		utentitemp = db.getUtenti();
		idutente = db.getIdUtentiInAmici();
		
        for(Utente ut:utentitemp){
        	if (!idutente.contains(Integer.toString(ut.getId()))){
        		utentidascanzionare.add(ut);
        	}
        }
        
		/*for(Utente utn : utentidascanzionare){
			System.out.println(utn.getNome());
			Crawlerretweet crwatwe = new Crawlerretweet();
			crwatwe.run(utn);
			}*/
        Crawlerretweet crwatwe = new Crawlerretweet();
        	crwatwe.test("regithabestari");
		}
	


}
